In many data communication systems, data sender and receiver devices are interconnected via a bus and data is transferred between those devices over the bus by a predetermined communication protocol. However, due to noise and protocol errors, not all of the data transmitted from a sender to a receiver is always received error free. To provide error detection and error correction, many conventional data communication systems utilize communication protocols wherein individual data bytes transmitted from a sender to a receiver over a data bus are provided with parity bits.
However, a parity bit for a data byte only protects against single-bit errors in the data byte. If there are two or more bit errors in the data bytes, the parity bit does not provide information for detecting and correcting those errors. Further, a parity bit scheme do not provide any error protection for a stream of data bytes transmitted from a sender to a receiver. Nor does a parity bit scheme provide any protection for protocol errors in which an entire data byte or word is dropped or repeated. For example, in a communication system utilizing a SICS bus protocol, handshake signals between a sender and a receiver are used to clock the bus in asynchronous mode. However, noise on the handshake signals can cause their misinterpretation at the receiver, and result in either missing or double clocking whereby data bytes are lost or repeated.
Conventional error detection schemes for alleviating the above shortcomings require substantial changes in existing data communication protocols in order to provide error detection for data transmitted from a sender to a receiver. For example, the SCSI bus protocol is primarily utilized for communication between an initiator device, such as host device, and several target devices, such as peripheral storage devices. The SCSI protocol is "target driven" wherein each target device determines the bus phase and direction of data transfer from the target to the initiator, or from the initiator to the target. Convention error detection schemes for the SCSI bus protocol either require changing the nature of the SCSI protocol from "target driven" to "initiator driven", or require both the target and the initiator to know the nature and location of error detection information for the data transmission in advance of transmission over the bus.
There is, therefore, a need for a method of adding error detection information to data transferred between a sender and a receiver over a bus, which provides protection for multiple data bit errors. There is also a need for such a method to provide error detection protection for a stream of data. There is also a need for such a method to not require a change in the data communication protocol over the bus such as in a SCSI bus protocol.